﻿#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//int main()
//{
//	int arr3[3] = { 1, 2, 3,};//初始化项太多 
//	int arr4[3] = { 1,2,1 };//数组是相同元素集合，数组类型是int整形，1.5是浮点型，不符合要求
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("%d\n", arr[0]);
//	printf("%d\n", arr[9]);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 0 };
//	int i = 0;
//	for (i = 0;i < 10;i++)
//	{
//		scanf("%d", &arr[i]);
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 0 };
//	int i = 0;
//	for (i = 0;i < 10;i++)
//	{
//		printf("&arr[%d]=%p\n",i, &arr[i]);//%p是打印地址的，这里打印地址所以 需要&取地址操作符
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("%d\n", sizeof(arr));//求出整个数组站的总字节
//	printf("%zd\n", sizeof(arr));//%zd是用来打印sizeof，但我们写成%d也没什么太大问题
//	printf("%d\n", sizeof(arr[0]));//求出一个数组元素所占的字节
//	int sz = sizeof(arr) / sizeof(arr[0]);//整个数组的站的总字节/一个数组元素所占的字节，就得出数组元素个数
//	printf("%d\n", sz);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	//完全初始化
//	int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
//	//不完全初始化
//	int arr2[3][4] = { 1,2,3 };
//	//按行初始化，不是说二维数组是由一维数组组成的吗
//	int arr3[3][4] = { {1,2},{3,4},{5,6} };
//	//初始化时省略⾏，但是不能省略列
//	int arr4[][4] = { 1,2,3 };
//	//省略行+按行存储
//	int arr5[][4] = { {1,2},{3,4},{5,6} };
//	//将第一个元素初始化为0，后面的元素默认为0
//	int arr6[][4] = { 0 };
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
//	printf("%d\n", arr1[2][1]);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[2][3] = { 0 };
//	int i = 0;
//	int j = 0;
//	for (i = 0;i < 2;i++)
//	{
//		for (j = 0;j < 3;j++)
//		{
//			scanf("%d", &arr[i][j]);
//		}
//	}
//	for (i = 0;i < 2;i++)
//	{
//		for (j = 0;j < 3;j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[2][3] = { 0 };
//	int i = 0;
//	int j = 0;
//	for (i = 0;i < 2;i++)
//	{
//		for (j = 0;j < 3;j++)
//		{
//			scanf("%d", &arr[i][j]);
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
// 
//int a[3] = { 0 };
//int a[3 + 5] = { 0 };
//int a[] = { 1,2,3 };
//#include<stdio.h>
//int main()
//{
//	int arr[3][4] = { 0 };
//	int i = 0;
//	int j = 0;
//	for (i = 0;i < 3;i++)
//	{
//		for (j = 0;j < 4;j++)
//		{
//			printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]);
//		}
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int a[n] = { 0 };
//	int i = 0;
//	for (i = 0;i < n;i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	for (i = 0;i < n;i++)
//	{
//		printf("%d ", a[i]);
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int n = 0;
//	scanf("%d", &n);
//	int left = 0;//下标从0开始
//	int right = sizeof(a) / sizeof(a[0]) - 1;//前面所讲的sizeof来求数组大小
//	int flag = 0;//用来最终确定有没有找到
//	while (left <= right)
//	{
//		//找中间元素下标,并且中间元素下标在变化随着查找的过程，不断减小查找n的范围
//		int mid = (left + right) / 2;
//		//判断n在数组左半部分，还是右半部分
//		if (a[mid] > n)
//		{
//			right = mid - 1;//减一是因为a[mid]这个元素！=n所以往前一位
//		}
//		else if (a[mid] < n)
//		{
//			left = mid + 1;//加一是因为a[mid]这个元素！= n所以往后一位
//		}
//		else
//		{
//			printf("找到了，下标是%d\n", mid);
//			flag = 1;
//			break;//找到了退出循环
//		}
//	}
//	if (flag == 0)
//	{
//		printf("找不到\n");
//	}
//	return 0;
//}
////遍历查找
//这种效率很低，但这不是升序数组也可以查找
//#include<stdio.h>
//int main()
//{
//	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int n = 0;
//	scanf("%d", &n);
//	int sz = sizeof(a) / sizeof(a[0]);//求数组元素个数
//	int flag = 0;
//	int i = 0;
//	for (i = 0;i < sz;i++)
//	{
//		if (a[i] == n)//如果找到了跳出循环
//		{
//			printf("找到了，下标是%d\n", i);
//			flag = 1;
//			break;
//		}
//	}
//	if (flag == 0)
//	{
//		printf("找不到\n");
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a =  5000000000;
//	int b = 15000000000;
//	printf("%d\n", (a + b) / 2);
//	printf("%d\n", (a + (b - a) / 2));
//	return 0;
//}
//二分查找-函数实现
//写一个二分查找函数
//功能：在一个升序数组中查找指定的数值，找到了就返回下标，找不到就返回 - 1.
//#include<stdio.h>
//int search(int arr[], int left, int right, int n)
//{
//	while (left <= right)
//	{
//		int mid = (left + right) / 2;
//		if (arr[mid] > n)
//		{
//			right = mid - 1;
//		}
//		else if (arr[mid] < n)
//		{
//			left = mid + 1;
//		}
//		else
//		{
//			return mid;
//		}
//	}
//	return -1;
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int left = 0;
//	int right = sizeof(arr) / sizeof(arr[0]);
//	int ret = search(arr, left, right, n);
//	if (ret != -1)
//	{
//		printf("找到了，下标是%d\n", ret);
//	}
//	else
//	{
//		printf("找不到\n");
//	}
//	return 0;
//}
//实现一个函数，打印乘法口诀表，口诀表的行数和列数自己指定
//如：输入9，输出9 * 9口诀表，输出12，输出12 * 12的乘法口诀表。
//#include<stdio.h>
//void print(int n)
//{
//	int i = 0;
//	int j = 0;
//	for (i = 1;i <= n;i++)//确定行数
//	{
//		for (j = 1;j <= i;j++)//一行打印几个
//		{
//			printf("%d*%d=%-2d ", i, j, i * j);
//		}
//		printf("\n");
//	}
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);//确定打印n*n的乘法口诀表
//	print(n);
//	return 0;
//}
//实现函数判断year是不是润年。
//int is_leap(int year)
//{
//	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}
//}
//#include<stdio.h>
//int main()
//{
//	int year = 0;
//	scanf("%d", &year);
//	if (is_leap(year))
//	{
//		printf("是润年\n");
//	}
//	else
//	{
//		printf("不是润年\n");
//	}
//	return 0;
//}
//实现一个函数is_prime，判断一个数是不是素数。
//利用上面实现的is_prime函数，打印100到200之间的素数。
#include<math.h>
#include<stdio.h>
int is_prime(int i)
{
	int j = 0;
	for (j = 2;j <= sqrt(i);j++)
	{
		if (i % j == 0)
		{
			return 0;//return直接结束
		}
	}
	return 1;
}
int main()
{
	int i = 0;
	int j = 0;
	for (i = 101;i <= 199;i ++)
	{
		if (is_prime(i))
		{
			printf("%d ", i);
		}
		
	}
	return 0;
}